﻿namespace fastdb.Lexer;

/// <summary>
///     扫描器：
///     1、从性能考虑，不支持符合的关键词，如：>=   <=   ，复合关键词要合成一起
/// </summary>
public class TokenKeyword
{
    public static Dictionary<string, TokenTypeEnum> Keywords = new(128);

    static TokenKeyword()
    {
        //-----------------sql关键词
        Keywords.Add("select", TokenTypeEnum.SELECT);
        Keywords.Add("*", TokenTypeEnum.Star);
        Keywords.Add("from", TokenTypeEnum.FROM);
        Keywords.Add("join", TokenTypeEnum.JOIN);
        Keywords.Add("leftjoin", TokenTypeEnum.LEFTJOIN);
        Keywords.Add("on", TokenTypeEnum.ON);
        Keywords.Add("where", TokenTypeEnum.WHERE);
        Keywords.Add("and", TokenTypeEnum.AND);
        Keywords.Add("or", TokenTypeEnum.OR);
        Keywords.Add("not", TokenTypeEnum.NOT);
        Keywords.Add("groupby", TokenTypeEnum.GROUPBY);
        Keywords.Add("having", TokenTypeEnum.HAVING);
        Keywords.Add("update", TokenTypeEnum.UPDATE);
        Keywords.Add("set", TokenTypeEnum.SET);
        Keywords.Add("delfrom", TokenTypeEnum.DELFROM);
        Keywords.Add("insertinto", TokenTypeEnum.INSERTINTO);
        Keywords.Add("values", TokenTypeEnum.VALUES);

        //-----------------常规
        Keywords.Add(" ", TokenTypeEnum.SPACE);
        Keywords.Add(",", TokenTypeEnum.DouHao);
        Keywords.Add("(", TokenTypeEnum.ZuoKuoHao);
        Keywords.Add(")", TokenTypeEnum.YouKuoHao);
        Keywords.Add("=", TokenTypeEnum.EQU);
        Keywords.Add(">", TokenTypeEnum.GREAT);
        Keywords.Add("<", TokenTypeEnum.SMALL);

        Keywords.Add("\r", TokenTypeEnum.BREAK);
        Keywords.Add("\n", TokenTypeEnum.NEWLINE);
    }
}